home *** CD-ROM | disk | FTP | other *** search
- 09Sep90/1409 Subject: Satelliten-Datensammler de DL6DBN @ DB0SGL
-
- Das folgende Dateiformat und Programm könnte für Beobachter der PACSATs
- interessant sein.
-
- Zur Erinnerung "PACSATs" sind Amateurfunksatelliten mit einer Packet-
- Radio Nutzlast an Bord. Das sind die Satelliten:
- UoSAT-OSCAR 14 mit "Mailbox", Digipeater und 9600 BpS FSK
- AMSAT-OSCAR 16 mit " " und 1200 BpS PSK
- DOVE-OSCAR 17 mit Sprache und Bulletins in 1200 BpS AFSK
- WEBERSAT-OSCAR 18 mit Bild-,Teilchen-,Spektralexperimenten und 1200 PSK
- LUSAT-OSCAR 19 mit "Mailbox", Digipeater und 1200 BpS PSK
- Fuji-OSCAR 20 mit Mailbox
-
- Das nachfolgende Programm wurde u. a. zum Einsammeln der Experimental-
- daten von WO-18 in GfA-BASIC 2.0 geschrieben. Es schaltet den TNC in
- den HOST-Mode (WA8DED oder TheFirmware nötig) und sammelt die vorgege-
- benen Daten im Monitormodus. Auf dem Bildschirm werden der empfangene
- Header und danach die evtl. zugehörigen Daten angezeigt. Die Daten wer-
- den dabei im vollen Atari-Zeichensatz dargestellt (0x00 bis 0xFF), um
- auch binäre Daten in einer angemessenen Form darzustellen (vielleicht
- steht ja was lesbares drin).
-
- Viel entscheidender ist aber, daβ die Daten gleichzeitig in einem beson-
- deren Format auf Diskette (am besten RAMDISK) gespeichert werden. Damit
- stehen sie für eine spätere Auswertung zur Verfügung. Das kann zum Bei-
-
- spiel die Berechnung der Telemetriewerte, die Bildregenerierung oder das
- Erstellen von Dateien aus Broadcastsendungen von UO-14, AO-16, oder LO-19
- sein.
-
- Wie sieht diese Fornat nun aus?
- Beim Öffnen des Files wird znächst ein Fileheader abgespeichert, durch
- den später die Dateiart erkannt werden kann. Er sieht folgendermaβen
- aus:
- 8 Bytes Formatbezeichner, immer "6DBN_DAT"
- 8 Bytes zur freien Verfügung (z.B. eigenes Rufzeichen oder Name)
- 2 Byte Attribute (bisher immer 0)
- CR
- LF
- Dann folgen die eigentlichen Daten.
- Als erstes wird der Header abgespeichert, damit man immer weiβ was
- das nachfolgende Datenpaket überhaupt enthalten soll. Am Ende des Headers
- kommt ein CR+LF. Dadurch wird es möglich den Header z.B. mit "LINE INPUT"
- in einem Stück zu lesen.
- Handelt es sich um Pakete vom Typ "Iab" oder "UI" dann kommen nach-
- folgende Informationen, ansonsten der nächste Header.
- Das nächste Byte danach ist die Länge der nachfolgenden Daten minus
- eins. Also 1 Byte Daten (weniger geht nach AX.25 nicht) entspricht einem
- Längenbyte von 0, und 255 entsprächen 256 Datenbytes (mehr geht auch
- nicht).
- Nun kann man zum Beispiel mit "INPUT$ (laenge+1,#..)" die komplette
- Information schnell in einen String einlesen.
- Danach käme gleich der nächste Header, usw. Am besten sieht man sich
- eine der erzeugten Dateien mal mit einem HEX-Monitor an.
-
- Noch ein paar Worte zum Programm. Zunächst wird man gefragt welche Pakete
- überhaupt gesammelt werden sollen. Die Angaben entsprechen denen des
- WA8DED Terminalmodus (also I, U, S und die Callistenzeiger + oder -).
- Dann erscheint eine Fileselectbox wo der Name der Zieldatei angegeben
- werden kann. Existiert die Datei bereits werden alle neuen Daten an die
- alte Datei angehängt. Dann beginnt das Sammeln. Abbrechen kann man mit
- ESC. Und da hakt das Programm etwas wenn keine Daten mehr vom TNC kommen.
- Evtl. muβ man ESC mehrmals drücken. Vor dem Verlassen des Programms
- wird die Datei geschlossen und der Monitormodus des TNC abgschaltet
- (M N +).
-
- Zum Sammeln aller Daten von UO-14 ist der HOST-Mode zu langsam. 9600 BpS
- auf der Funkstrecke und nur 9600 BpS auf der V.24 Strecke, da muβ irgendwo
- was unter den Tisch fallen oder vollaufen. In diesem Fall muβ geziel ge-
- sammelt werden (QST,TLM für Satellitendaten oder QST-1 für Broadcast).
-
- Viel Spaβ und vielleicht veröffentliche ich auch noch Routinen für die
- Webersat-Bilder oder zur Telemetrieberechnung.
-
- 73 Frank, DL6DBN @ DB0SGL
-
- Und hier das Programm:
-
- CLS
- PRINT AT(1,2);" AX.25 - DATA-COLLECTOR for TNC2/Hostmode by F.Sperber, DL6DBN"
- PRINT
- INPUT " Which frames to collect ? <IUS+-> : M ",dest$
- '
- CLS
- PRINT AT(1,3);" DATA TO FILE ?"
- FILESELECT "\*.*","",name$
- IF name$="" THEN
- END
- ENDIF
- OPEN "U",#11,"AUX:"
- OPEN "O",#13,"CON:"
- OPEN "O",#14,"VID:"
- IF EXIST(name$) THEN
- OPEN "A",#15,name$
- ELSE
- OPEN "O",#15,name$
- PRINT #15,"6DBN_DAT";" ";chr$(0);chr$(0);chr$(13);chr$(10); ! Dateikopf
- ENDIF
- '
- PRINT #11,CHR$(17);CHR$(8);CHR$(8);CHR$(8); ! TNC frei machen
- dummy=XBIOS(15,-1,0,-1,-1,-1,-1) ! V.24 Handshake aus
- WHILE BIOS(1,1)<>0
- dummy=INP(#11)
- WEND
- PRINT #11,CHR$(27);"JHOST1";CHR$(13); ! in HOST-Mode
- @event_timer(1000,0)
- CLS
- WHILE BIOS(1,1)<>0 ! auf's Echo warten
- PRINT CHR$(INP(#11));
- WEND
- '
- cmd$="M"+dest$ ! Monitor einschalten
- @send_cmd
- @get_tnc
- PRINT " <><><> Data collection in progress <><><>"
- PRINT " Terminate with ESC for several times !"
- PRINT
- '
- REPEAT
- ret$=INKEY$
- EXIT IF ret$=CHR$(27)
- @poll_tnc
- @get_tnc
- UNTIL INKEY$=CHR$(27)
- '
- cmd$="MN+" ! Monitor ausschalten
- PRINT cmd$
- @send_cmd
- @get_tnc
- cmd$="JHOST0" ! HOST-Mode verlassen
- PRINT cmd$
- @send_cmd
- @get_tnc
- CLOSE #11
- CLOSE #13
- CLOSE #14
- CLOSE #15
- dummy=XBIOS(15,-1,1,-1,-1,-1,-1) ! X-ON/X-OFF einschalten
- END
- '
- PROCEDURE send_cmd
- PRINT #11,CHR$(0);CHR$(1);CHR$(LEN(cmd$)-1);cmd$;
- @event_timer(100,0) ! Pause für Accessories einlegen
- RETURN
- PROCEDURE poll_tnc
- PRINT #11,CHR$(0);CHR$(1);CHR$(0);"G";
- @event_timer(100,0) ! Pause für Accessories einlegen
- RETURN
- PROCEDURE get_tnc
- a%=INP(#11)
- code%=INP(#11)
- IF code%=4 OR code%=5 THEN ! I oder UI Header
- @get_header
- ELSE
- IF code%=6 OR code%=7 THEN ! I oder UI Daten
- @get_info
- ELSE
- IF code%<>0 THEN ! Rest
- @get_nulltermi
- ENDIF
- ENDIF
- ENDIF
- RETURN
- PROCEDURE get_nulltermi
- resp$=""
- REPEAT
- a%=INP(#11)
- resp$=resp$+CHR$(a%)
- UNTIL a%=0
- RETURN
- PROCEDURE get_header
- @get_nulltermi
- PRINT #13,resp$
- header$=LEFT$(resp$,LEN(resp$)-1)
- PRINT #15,header$;CHR$(13);CHR$(10);
- RETURN
- PROCEDURE get_info
- resp$=""
- a%=INP(#11)
- count%=a%+1
- resp$=INPUT$(count%,#11)
- PRINT #15,CHR$(a%);resp$;
- PRINT #14,resp$
- PRINT #13
- RETURN
- PROCEDURE event_timer(lo%,hi%)
- DPOKE GINTIN,lo%
- DPOKE GINTIN+2,hi%
- DPOKE GCONTRL,24
- DPOKE GCONTRL+2,2
- DPOKE GCONTRL+4,1
- DPOKE GCONTRL+6,0
- DPOKE GCONTRL+8,0
- GEMSYS
- RETURN
-
-